A storage system typically comprises one or more storage devices into which information may be entered, and from which information may be obtained, as desired. The storage system includes a storage operating system that functionally organizes the system by, inter alia, invoking storage operations in support of a storage service implemented by the system. The storage system may be implemented in accordance with a variety of storage architectures including, but not limited to, a network-attached storage environment, a storage area network and a disk assembly directly attached to a client or host computer. The storage devices may be persistent electronic storage devices, such as flash memories, but are typically disk drives organized as a disk array, wherein the term “disk” commonly describes a self-contained rotating magnetic media storage device. The term disk in this context is synonymous with hard disk drive (HDD) or direct access storage device (DASD).
Storage of information on the disk array is illustratively implemented on one or more storage volumes of physical disks, defining an overall logical arrangement of storage space. The storage operating system of the storage system may implement a high-level module, such as a file system, to logically organize the information stored on the volumes as a hierarchical structure of data containers, such as files and logical units. For example, each “on-disk” file may be implemented as set of data structures, i.e., disk blocks, configured to store information, such as the actual data for the file. These data blocks are organized within a volume block number (vbn) space that is maintained by the file system.
The storage system may be further configured to operate according to a client/server model of information delivery to thereby allow many clients to access data containers stored on the system. In this model, the client may comprise an application, such as a database application, executing on a computer that “connects” to the storage system over a computer network, such as a point-to-point link, shared local area network (LAN), wide area network (WAN), or virtual private network (VPN) implemented over a public network such as the Internet. Each client may request the services of the storage system by issuing file-based and block-based protocol messages (in the form of packets) to the system over the network.
A plurality of storage systems or nodes may be interconnected to provide a storage system cluster configured to service many clients. Each storage system may be configured to service one or more aggregates, wherein each aggregate contains one or more volumes of disks. Aggregates are further described in commonly owned, U.S. Patent Publication No. 2005/0246401, entitled EXTENSION OF WRITE ANYWHERE FILE SYSTEM LAYOUT, by John K. Edwards et al., now issued as U.S. Pat. No. 7,409,494 on Aug. 5, 2008, the contents of which are hereby incorporated by reference. Aggregates can fail for a number of reasons, including lost connectivity, failure of a significant number of disks within a volume and/or aggregate, etc. When an aggregate fails, clients may be unable to access the data contained on the failed aggregate.
Typically, the disks of a volume/aggregate are organized into Redundant Arrays of Independent (or Inexpensive) Disk (RAID) groups. Most RAID implementations enhance the reliability/integrity of the data storage through the redundant writing of data “stripes” across a given number of physical disks in the RAID group and by storing redundancy information (e.g., parity) with respect to the striped data. The use of a RAID group thus protects data locally stored in the group of the aggregate. That is, RAID groups generally provide protection against the loss of data on one or more disks within the group of an aggregate, which is served by a particular storage system. If the storage system itself fails, however, then the data stored on the served aggregate is no longer accessible to the client, thus resulting in aggregate failure.
One solution to such aggregate failure has been to create a mirrored image (“mirror”) of the data contained on the aggregate and service that mirror on another storage system. Mirroring of an aggregate typically requires complete duplication of storage system resources, including storage devices, resulting in an inefficient use of storage space (for example by utilizing half of the overall space consumed on a storage system) and substantial operating costs. Additionally, the response time in some mirrored systems, e.g., a mirrored synchronous storage system, may be especially slow because such systems store data in both mirrors before the systems can respond to clients that the data has been persistently stored.